/**
 * 创建应用
 */
var App = function() {
    var ajax;
    return {
        /**
         * 初始化
         * 应用入口
         */
        init : function(require) {
            //实例化方式，支持自定义监听事件
            //实例化AJAX对象
            ajax = new Fw.Ajax({
                //数据源（自定以URL）
                //url: '/data/demo1Service/XXX.json',
                //数据源（服务接口）
                //service: 'demo1Service.queryXXX',
                service: 'demo1Service',
                //method: 'query',//默认为query，方法名称必须是query开头
                //如果需要同时调用同一个服务的多个（CRUD）接口，则需要单独设置method
                //查询数据
                queryMethod: 'query',//默认为query，方法名称必须是query开头
                //获取数据
                getMethod: 'getDataByName',//方法名称必须是get开头
                //新增数据
                insertMethod: 'insert',//默认为insert，方法名称必须是insert开头
                //删除数据
                deleteMethod: 'delete',//默认为delete，方法名称必须是delete开头
                //更新数据
                updateMethod: 'update',//默认为update，方法名称必须是update开头
                //执行数据提交
                executeMethod: 'executeUpdate',//方法名称必须是execute开头
                //请求参数
                // params: {
                    // title: 'xxxx'
                // },
                //排序方式（仅对服务接口queryXXX有效）
                sort: [{
                    property : 'name',
                    direction : 'asc'
                }, {
                    property : 'lastModiDate',
                    direction : 'asc'
                }],
                //是否使用数据挡板（默认false）
                staticData: true,
                //定义监听事件（实例化前定义）
                listeners: {
                    //查询数据前触发
                    beforequery: this.onBeforeXXX,
                    //查询数据后触发
                    query: this.onXXX,
                    
                    //获取数据前触发
                    beforeget: this.onBeforeXXX,
                    //获取数据后触发
                    get: this.onXXX,
                    
                    //新增数据前触发
                    beforeinsert: this.onBeforeXXX,
                    //新增数据后触发
                    insert: this.onXXX,
                    
                    //删除数据前触发
                    beforedelete: this.onBeforeXXX,
                    //删除数据后触发
                    'delete': this.onXXX,
                    
                    //更新数据前触发
                    beforeupdate: this.onBeforeXXX,
                    //更新数据后触发
                    update: this.onXXX,
                    
                    //执行数据提交前触发
                    beforeexecute: this.onBeforeXXX,
                    //执行数据提交后触发
                    execute: this.onXXX
                }
            });
            
            //
            $('#list').on('click', 'a', function(e){
                switch($(e.target).attr('id')){
                    case 'query':
                        //定义监听事件（实例化后定义）
                        //查询数据前触发
                        //ajax.on('beforequery', this.onBeforeQuery, this);
                        //查询数据后触发
                        //ajax.on('query', this.onQuery, this);
                        //查询数据
                        ajax.query();
                        break;
                    case 'get':
                        //定义监听事件（实例化后定义）
                        //获取数据前触发
                        //ajax.on('beforeget', this.onBeforeGet, this);
                        //获取数据后触发
                        //ajax.on('get', this.onGet, this);
                        //获取数据
                        ajax.get('arg1');
                        break;
                    case 'insert':
                        //定义监听事件（实例化后定义）
                        //新增数据前触发
                        //ajax.on('beforeinsert', this.onBeforeInsert, this);
                        //新增数据后触发
                        //ajax.on('insert', this.onInsert, this);
                        //新增数据
                        var random = Math.floor(Math.random() * 100);
                        var vo = {
                            name: '新增数据' + random,
                            type: {
                                id: '4b803e83-a67c-43b4-a9be-96324b01461c'
                            },
                            remark: '新增数据新增数据' + random,
                            lastModiDate: new Date(),
                            status: 1
                        };
                        ajax.insert(vo);
                        break;
                    case 'del':
                        //定义监听事件（实例化后定义）
                        //删除数据前触发
                        //ajax.on('beforedelete', this.onBeforeDelete, this);
                        //删除数据后触发
                        //ajax.on('delete', this.onDelete, this);
                        //删除数据
                        ajax.del('arg1');
                        break;
                    case 'update':
                        //定义监听事件（实例化后定义）
                        //更新数据前触发
                        //ajax.on('beforeupdate', this.onBeforeUpdate, this);
                        //更新数据后触发
                        //ajax.on('update', this.onUpdate, this);
                        //更新数据
                        var random = Math.floor(Math.random() * 100);
                        var vo = {
                            id: '6c577471-7e0b-4e0c-af01-c9ba75b0bc38',
                            name: '更新数据' + random,
                            remark: '更新数据更新数据' + random,
                            lastModiDate: new Date()
                        };
                        ajax.update(vo);
                        break;
                    case 'execute':
                        //定义监听事件（实例化后定义）
                        //执行数据提交前触发
                        //ajax.on('beforeexecute', this.onBeforeExecute, this);
                        //执行数据提交后触发
                        //ajax.on('execute', this.onExecute, this);
                        //执行数据提交
                        ajax.execute('arg1');
                        break;
                }
            });
        },
        /**
         * 执行前（query、getXXX、insert、delete、update、executeXXX）触发
         * @param {Object} Ajax对象
         * @param {Object} 请求报文
         * @param {String} 请求路径
         */
        onBeforeXXX : function(ajax, message, url) {
            //设置查询条件
            // ajax.setParams('p1', '11123');
            //设置排序方式（仅对服务接口queryXXX有效）
            // ajax.setSorts('col12', 'asc');
            //return false; //则不执行
        },
        /**
         * 执行后（query、getXXX、insert、delete、update、executeXXX）触发
         * @param {Object} Ajax对象
         * @param {Object} 响应数据（result[Fw.Ajax.rootProperty]部分）
         * @param {Object} 响应数据（全部）
         */
        onXXX : function(ajax, data, result) {
            alert(Fw.encode(data));
        }
    };
}();

/**
 * 页面加载完毕后，初始化应用
 */
Fw.onReady(App);
